/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package edu.upn.sigemfi.can.beans;

import edu.upn.sigemfi.can.bc.TarjetaDebitoDelegate;
import edu.upn.sigemfi.plt.be.Cuenta;
import edu.upn.sigemfi.plt.be.EstadoTarjetaDebito;
import edu.upn.sigemfi.plt.be.TarjetaDebito;
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.model.SelectItem;

/**
 *
 * @author Orlando ( U )
 */
public class TarjetaDebitoController extends AbstractController {

    private TarjetaDebitoDelegate tarjetaDebitoDelegado;
    private TarjetaDebito tarjetaDebito;
    private TarjetaDebito tarjetaBuscada;
    private String nroTarjeta;
    private String clave;
    private ArrayList<String> numeros;
    private boolean cargador;

   
    public String getClave() {
        return clave;
    }

    public void setClave(String clave) {
        this.clave = clave;
    }
    
    public TarjetaDebitoController() {
        tarjetaDebitoDelegado = new TarjetaDebitoDelegate();
        
        tarjetaDebito = new TarjetaDebito();

        this.cargador = false;
        generarNros();
         
    }

    public String index() {
        return "index";
    }

    public String cancelar() {
        return "listar";
    }

    public String tarjetaDebito() {
        return "tarjetadebito";
    }

    public String editar() {
        return "editar";
    }

    public String nuevo() {
        tarjetaDebito = new TarjetaDebito();
        clave = "";
        generarNros();
        return "nuevo";
    }

    public String cargar() {
        tarjetaDebito = new TarjetaDebito();
        clave = "";
        generarNros();
        this.cargador = true;
        return "login";
     
    }

    public String actualizar() {

        if((!tarjetaDebito.getClaveInternet().equals(clave)) || (clave.length() != 6) ){
            error("Las Claves No coinciden");
            return "";
        }

        try {
            tarjetaBuscada.setClaveInternet(clave);
            
            tarjetaDebitoDelegado.editar(tarjetaBuscada);
            info("La Tarjeta se actualizó correctamente. Se ha generado su nueva Clave Internet");
        } catch (Exception e) {
            error(e.getMessage());
        }
        clave = "";
        
        return "volverIndex";
    }


    public boolean validarPorNroTarjetayClave() throws Exception {
        try {
            tarjetaBuscada = tarjetaDebitoDelegado.buscarTarjetaPorNroTarjetayClave(nroTarjeta, clave);//local.find(codigo);
            
            return true;
        } catch (Exception e) {
            //    local = lookupCuentaFacade();
            return false;
            // throw new Exception("Buscar por nro de Cuenta. " + e.getMessage(), e);
        }
    }

    public boolean validarPorNroTarjetayClaveInternet() throws Exception {
        try {
            tarjetaBuscada = tarjetaDebitoDelegado.buscarTarjetaPorNroTarjetayClaveInternet(nroTarjeta, clave);//local.find(codigo);

            return true;
        } catch (Exception e) {
            //    local = lookupCuentaFacade();
            return false;
            // throw new Exception("Buscar por nro de Cuenta. " + e.getMessage(), e);
        }
    }
      
       
    public TarjetaDebito buscar(Long codigo) {
        try {
            return tarjetaDebitoDelegado.buscar(codigo);
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public List<TarjetaDebito> getTarjetaDebitos() {
        try {
            return tarjetaDebitoDelegado.listar();
        } catch (Exception e) {
            error(e.getMessage());
        }
        return null;
    }

    public TarjetaDebito getTarjetaDebito() {
        return tarjetaDebito;
    }

    public SelectItem[] getEstadosTarjeta() {
        EstadoTarjetaDebito[] estadosTarjeta = EstadoTarjetaDebito.values();
        SelectItem[] select = new SelectItem[estadosTarjeta.length];
        int i = 0;
        for (EstadoTarjetaDebito et : estadosTarjeta) {
            select[i++] = new SelectItem(et, et.toString());
        }
        return select;
    }

    public String continuar(){
        tarjetaDebito.setClaveTarjeta(clave);
        generarNros();
        try {
            tarjetaBuscada = tarjetaDebitoDelegado.buscarTarjetaPorNroTarjetayClave(tarjetaDebito.getNroTarjeta(), clave);
        } catch (Exception ex) {
            Logger.getLogger(TarjetaDebitoController.class.getName()).log(Level.SEVERE, null, ex);
            error("La Clave de Tarjeta es Incorrecta");
            return "";
        }
        clave = "";
        return "confirmar";
    }


    public String loguin(){
        tarjetaDebito.setClaveInternet(clave);
        generarNros();

       try {
            tarjetaBuscada = tarjetaDebitoDelegado.buscarTarjetaPorNroTarjetayClaveInternet(tarjetaDebito.getNroTarjeta(), clave);
        } catch (Exception ex) {
           Logger.getLogger(TarjetaDebitoController.class.getName()).log(Level.SEVERE, null, ex);
            error("La Clave de Internet es Incorrecta");
            return "";
            
        }
        clave = "";
        return "irIndex";
    }

    public void setTarjetaDebito(TarjetaDebito tarjetaDebito) {
        this.tarjetaDebito = tarjetaDebito;
    }

    public TarjetaDebito getTarjetaBuscada() {
        return tarjetaBuscada;
    }

    public void setTarjetaBuscada(TarjetaDebito tarjetaBuscada) {
        this.tarjetaBuscada = tarjetaBuscada;
    }

    public SelectItem[] getCuentasSI(){

        SelectItem[] select = new SelectItem[tarjetaBuscada.getCuentaCollection().size()];
        int i = 0;
        for (Cuenta cue : tarjetaBuscada.getCuentaCollection()) {
            select[i++] = new SelectItem(cue, cue.getNroCuenta());
        }
        return select;
    }

    public boolean isCargador() {
        return cargador;
    }

    public void setCargador(boolean cargador) {
        this.cargador = cargador;
    }

    private void generarNros(){
        numeros = new ArrayList<String>();

        numeros.add("0");
        numeros.add("1");
        numeros.add("2");
        numeros.add("3");
        numeros.add("4");
        numeros.add("5");
        numeros.add("6");
        numeros.add("7"); 
        numeros.add("8");
        numeros.add("9");
        
        
        int pos = 0;
        for(int i = 0; i< 100; i++){
            pos = (int) (Math.random() * 10);
            String mov = numeros.remove(pos);
            numeros.add(mov);
        }
    }

    public String getN0(){
        return numeros.get(0);
    }

    public String getN1(){
        return numeros.get(1);
    }

    public String getN2(){
        return numeros.get(2);
    }

    public String getN3(){
        return numeros.get(3);
    }

    public String getN4(){
        return numeros.get(4);
    }

    public String getN5(){
        return numeros.get(5);
    }

    public String getN6(){
        return numeros.get(6);
    }

    public String getN7(){
        return numeros.get(7);
    }

    public String getN8(){
        return numeros.get(8);
    }

    public String getN9(){
        return numeros.get(9);
    }

    public String agregar0(){
        clave = clave + numeros.get(0);
        return "";
    }
    
    public String agregar1(){
        clave = clave + numeros.get(1);
        return "";
    }
    
    public String agregar2(){
        clave = clave + numeros.get(2);
        return "";
    }
    
    public String agregar3(){
        clave = clave + numeros.get(3);
        return "";
    }
    
    public String agregar4(){
        clave = clave + numeros.get(4);
        return "";
    }
    
    public String agregar5(){
        clave = clave + numeros.get(5);
        return "";
    }
    
    public String agregar6(){
        clave = clave + numeros.get(6);
        return "";
    }
    
    public String agregar7(){
        clave = clave + numeros.get(7);
        return "";
    }
    
    public String agregar8(){
        clave = clave + numeros.get(8);
        return "";
    }
    
    public String agregar9(){
        clave = clave + numeros.get(9);
        return "";
    }

    public String borrar(){
        clave = clave.substring(0, clave.length() - 1);
        return "";
    }
    
}
